1 Введение
Данное руководство предназначено для разработчиков стороннего программного обеспечения, которые желают взаимодействовать с ПО "Хроматэк Аналитик 4" с помощью REST API.
API (Application Programming Interface – программный интерфейс приложения) – это набор способов и правил, по которым различные программы общаются между собой и обмениваются данными.
REST API – это архитектурный подход, который устанавливает ограничения для API: как они должны быть устроены и какие функции поддерживать. Это позволяет стандартизировать работу программных интерфейсов, сделать их более удобными и производительными.
Слово REST – акроним от Representational State Transfer, что переводится на русский как "передача состояния представления", "передача репрезентативного состояния" или "передача самоописываемого состояния".
В "Хроматэк Аналитик 4" с помощью REST API вы можете:
Получить список соединений.
Получить список инструментальных методов, передавать методы в хроматограф.
Запустить и остановить последовательность анализов (план).
Получить результаты измерений (последние или в заданном интервале времени).
Во всех запросах в данном документе переменной {{host}} обозначен базовый URL сервера "Хроматэк Аналитик".
Например:
http://192.168.0.243
2 Управление хроматографом
2.1 Авторизация
2.1.1 Получение основных токенов
Для управления хроматографами по API нужно выполнить авторизацию и получить авторизационный токен, который будет в дальнейшем передаваться в заголовках POST-запросов.
В теле POST-запроса нужно передать объект с логином и паролем администратора (см. код ниже). Запрос выполняется к конечной точке:
POST {{host}}/api/auth/v1/login { "login": "admin", "password": "admin" }
Здесь указаны логин и пароль, установленные по умолчанию. В вашем случае они могут быть другие, если вы их меняли.
Ответ – объект следующей структуры:
{ "userId": "admin", "roleId": "admin", "permissions": [ "admin", "all_data_access", "modify_connections", "modify_projects", "update_firmware", "modify_config", "modify_sequence", "modify_method_instr", "modify_method_proc", "change_passport_values", "change_passport_keys", "change_shewhart_data", "modify_channels", "manual_markup", "modify_chrom_method", "modify_retention", "delete_data" ] }
Данный объект нас не интересует. Необходимые данные нужно извлечь из заголовков ответа.
Заголовок Authorization содержит искомое значение {{Access-Token}}. Время его жизни – 5 минут.
Так же нужно получить значение заголовка Refresh-Token. Время его жизни – 1 месяц.
{{Access-Token}} нужно регулярно обновлять.
Здесь и далее параметры в скобках {{}} указывают, что это значения заголовков.
Пример {{Access-Token}}
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJhZG1pbiIsInJvbGVJZCI6ImFkbWluIiwicGVybWlzc2lvbnMiOl siYWRtaW4iLCJhbGxfZGF0YV9hY2Nlc3MiLCJtb2RpZnlfY29ubmVjdGlvbnMiLCJtb2RpZnlfcHJvamVjdHMiLCJ1cGRhdGVfZmlyb XdhcmUiLCJtb2RpZnlfY29uZmlnIiwibW9kaWZ5X3NlcXVlbmNlIiwibW9kaWZ5X21ldGhvZF9pbnN0ciIsIm1vZGlmeV9tZXRob2Rf cHJvYyIsImNoYW5nZV9wYXNzcG9ydF92YWx1ZXMiLCJjaGFuZ2VfcGFzc3BvcnRfa2V5cyIsImNoYW5nZV9zaGV3aGFydF9kYXRhIiw W9kaWZ5X2NoYW5uZWxzIiwibWFudWFsX21hcmt1cCIsIm1vZGlmeV9jaHJvbV9tZXRob2QiLCJtb2RpZnlfcmV0ZW50aW9uIiwiZGVZ RlX2RhdGEiXSwibG9naW5JZCI6IlpUeVEtLWgwU05pcV96cklwYkxrUEEiLCJkZXZpY2UiOiIxOTIuMTY4LjAuODMiLCJleHAiOjEMD yMjExODUsIm5iZiI6MTcwMDIyMDg4NX0.jZgl68Ob1jN4fOwiZv2CziJYpq5PU_18-gcLyhLK2QQ
Пример {{Refresh-Token}}
ZTyQ--h0SNiq_zrIpbLkPA.4K8T9aVNRCKT7okE2XL78g.gYD8vgcwTXKYkn4JWSAd6R9vVQhtSoWaSjqebwgyDBg
2.1.2 Получение токена для сервиса управления приборами
Далее следует получить ещё один токен запросом к конечной точке:
POST {{host_auth}}/api/auth/v1/access Authorization: {{Access_Token}}
Здесь {{Access-Token}} в заголовке запроса получен на предыдущем этапе.
В ответе извлеките из заголовка Refresh-Token значение {{Refresh-Token-Instrument}}.
Это специальный токен для сервиса управления приборами. Обратите внимание, он тоже извлекается из заголовка Refresh-Token, но это не то же самое, что {{Refresh-Token}}, полученный на предыдущем этапе.
Таким образом вы получите три токена:
{{Access-Token}}
{{Refresh-Token}}
{{Refresh-Token-Instrument}}
Последний потребуется нам один раз, при подключении к прибору.
2.1.3 Обновление токенов
Как уже было сказано, {{Access-Token}} живёт 5 минут и его нужно регулярно обновлять.
Не рекомендуется каждый раз получать {{Access-Token}} и {{Refresh-Token}} запросом к конечной точке /login, поскольку в этом случае всегда передаются в открытом виде логин и пароль, а также увеличивает базу хранимых {{Refresh-Token}}.
Для обновления {{Access-Token}} используйте POST-запрос к конечной точке /refresh с полученным долгоживущим {{Refresh-Token}} в заголовке.
POST {{host}}/api/auth/v1/refresh Refresh-Token: {{Refresh-Token}}
В ответе снова извлеките значение {{Access-Token}} из заголовка Authorization, а также новое значение {{Refresh-Token}} из заголовка Refresh-Token.
Далее следует выполнить POST-запрос с конечной точке /confirm:
POST {{host}}/api/auth/v1/confirm Refresh-Token: {{Refresh-Token}}
Этот запрос уничтожит предыдущий Refresh-Token. Актуальным станет новый.
2.2 Получение списка соединений
Запрос выполняется к конечной точке:
GET {{host}}/api/p4/v1/5000/profileManager/profiles
Пример:
https://a4.chromatec.ru/api/p4/v1/5000/profileManager/profiles
Ответ – объект следующей структуры:
[ { "id": "fb273a5767a04e4cbd59197d492702a3", "name": "2052411", "startChannelsCount": 1, "autoRun": false, "diagnosticStorageTime": 15, "instruments": [ { "pluginId": "PM3", "name": "ПМ3", "instrumentSettings": null, "connectionSettings": "", "connectionParameters": { "connectionType": 0, "port": 2010, "address": 1531816128, "comPort": 0, "msdAddress": 0, "msdPort": 0, "isMsdOn": false, "serial": null, "deviceType": 0, "pluginId": "", "serialPortBaudRate": 0, "localEndpoint": null, "isConnected": false, "isUnreacheable": false, "cts": false }, "startChannel": 0, "isActive": true, "id": "837a1d7e-4f99-c76d-f646-5ecd63027a3e", "index": 1, "serialNumber": "2052411", "version": "v 03.21.17.759" }, ..... ], "sessions": [ { "id": "fa4c6ebadaf445019bada3aeaa21e4c7", "name": null, "startChannel": 0, "project": null, "method": null, "synchronizeTime": false, "analysisTime": 0, "channelsSettings": null, "isDynamic": false } ], "method": null, "autoLoadMethod": false, "autoSaveDiagnosticsLog": false, "remoteAddress": null, "remotePort": 0, "isConnected": false, "userId": "a.demakov" }, ..... ]
Для дальнейшей работы потребуется извлечь из этого массива для каждого соединения его id – уникальный идентификатор.
2.3 Подключение к прибору
Обновите {{Access-Token}} и {{Refresh-Token}}
Далее выполните запрос:
POST {{host}}/api/p4/v1/5000/profileManager/connect?profileId={{id}}&token={{Refresh-Token-Instrument}} Authorization: {{Access-Token}}
Если время жизни какого-либо токена истекло, вы получите сообщение:
Bad token
Если подключение успешно, он вернет ответ с HTTP-статусом 200 OK, а также ваш адрес локального сервера приборов, к которому вы подключились.
Например, http://192.168.0.83:5002
Во всех последующих запросах по управлению хроматографом в качестве хоста следует подставлять адрес локального сервера. Он будет описываться, как переменная {{local}}.
2.4 Инструментальный метод
2.4.1 Получение инструментальных методов
Обновите {{Access-Token}} и {{Refresh-Token}}
Далее выполните запрос:
GET{{local}}/aggregatorRest/instrumentMethods Authorization: {{Access-Token}}
В ответе вы получите массив названий методов. Например:
[ "test_instr_method" ]
2.4.2 Загрузка инструментального метода
Обновите {{Access-Token}} и {{Refresh-Token}}
Далее выполните запрос:
POST{{local}}/aggregatorRest/loadMethod?methodName={{methodName}} Authorization: {{Access-Token}}
{{methodName}} – имя метода, который вы хотите загрузить.
Ответ:
true
2.4.3 Сохранение инструментального метода
Обновите {{Access-Token}} и {{Refresh-Token}}
Далее выполните запрос:
POST{{local}}/aggregatorRest/saveMethod?methodName={{methodName}} Authorization: {{Access-Token}}
{{methodName}} – имя метода, который вы хотите сохранить.
Ответ:
true
2.4.4 Получение каналов старта
POST{{local}}/aggregatorRest/getStartChannels Authorization: {{Access-Token}}
В ответе вы получите массив данных по каналам старта и текущее состояние каналов (этап и время):
[ { "stage": 4, "time": 4.583333333333333, "analysisTime": 300, "number": 1 } ]
Этапы хроматографа (параметр "stage"):
0. Нулевой | 5. Подготовка к продувке | 10. Фатальная авария |
---|---|---|
1. Подготовка | 6. Продувка | 11. Запуск метода |
2. Ожидание | 7. Экономия | 12. Старт анализа |
3. Поджиг | 8. Охлаждение | 13. Ожидание периферии |
4. Готовность | 9. Анализ |
2.4.5 Получение списка параметров инструментального метода
Обновите {{Access-Token}} и {{Refresh-Token}}
GET{{local}}/aggregatorRest/params?deviceContext={{deviceContext}}¶mContext={{paramContext}} Authorization: {{Access-Token}}
{{deviceContext}} – контекст устройства | {{paramContext}} – контекст параметра | ||
---|---|---|---|
Битовая маска, позволяющая отфильтровать список получаемых параметров по категории устройства | Битовая маска, позволяющая отфильтровать список получаемых параметров по категории параметра | ||
0x0001 | Параметры неизвестного устройства | 0x0001 | Параметры без категории |
0x0002 | Параметры хроматографа | 0x0002 | Параметры конфигурации |
0x0004 | Параметры газового и силового модуля | 0x0004 | Экспертные параметры конфигурации |
0x0008 | Параметры канала старта | 0x0008 | Параметры состояния |
0x0010 | Параметры термостатов | 0x0010 | Параметры информации (версии прошивки) |
0x0020 | Параметры дозаторов | 0x0020 | Параметры сеанса (записываемые сигналы) |
0x0040 | Параметры переходной линии | 0x0040 | Параметры диагностики |
0x0080 | Параметры насосов | 0x0080 | Сообщения |
0x0100 | Параметры кранов | 0x0100 | Параметры метода инструмента |
0x0200 | Параметры клапанов | 0x0200 | Параметры поджига |
0x0400 | Параметры портов ввода | 0x0400 | Параметры охлаждения |
0x0800 | Параметры колонок | 0x0800 | Группируемые параметры |
0x1000 | Параметры термостата колонок | 0x1000 | Параметры продувки |
0x2000 | Параметры газовых регуляторов | 0x2000 | Сообщения об аварии |
0x4000 | Параметры вспомогательных газовых регуляторов и измерителей | 0xFFFF | Все параметры |
0x8000 | Параметры метанатора | ||
0x10000 | Параметры детекторов | ||
0x20000 | Параметры внешних детекторов | ||
0x40000 | Параметры вспомогательных устройств | ||
0xFFFFF | Параметры всех устройств |
В ответе возвращается массив объектов:
[ { "name": "AdditionalChannel1", "deviceName": "Силовой модуль", "instrumentName": "ПМ2", "id": "AdditionalChannel1", "deviceId": "TemperatureModule", "instrumentId": "3a0c2230-babd-500c-8005-056e1556463d", "instrumentIndex": 1, "deviceNumber": 1, "wrong": false, "measured": 15.0141, "controlled": null, "assigned": null, "progNames": null, "enumNames": null, "orderNumber": 0, "paramCategory": 1, "deviceCategory": 1, "type": "", "group": null, "range": null, "range1": null, "range2": null, "comment": null, "deviceComment": null, "allowableValue": null, "device": { "isOutOfNorm": false, "comment": null, "name": "Силовой модуль", "id": "TemperatureModule", "number": 1, "isNotConnected": false } }, ..... ]
2.4.6 Обновление параметра инструментального метода
Обновите {{Access-Token}} и {{Refresh-Token}}
PATCH{{local}}/aggregatorRest/setParam Authorization: {{Access-Token}} { "name": "AdditionalChannel2", "deviceName": "Силовой модуль", "instrumentName": "ПМ2", "id": "AdditionalChannel1", "deviceId": "TemperatureModule", "instrumentId": "3a0c2230-babd-500c-8005-056e1556463d", "instrumentIndex": 1, "deviceNumber": 1, "wrong": false, "measured": 15.014, "controlled": null, "assigned": null, "progNames": null, "enumNames": null, "orderNumber": 0, "paramCategory": 1, "deviceCategory": 1, "type": "", "group": null, "range": null, "range1": null, "range2": null, "comment": null, "deviceComment": null, "allowableValue": null, "device": { "isOutOfNorm": false, "comment": null, "name": "Силовой модуль", "id": "TemperatureModule", "number": 1, "isNotConnected": false } }
Чтобы вызвать этот метод, вы должны передать объект {{paramContext}} и {{deviceContext}} в теле запроса. Это один из объектов массива, полученного на предыдущем этапе.
2.4.7 Запуск инструментального метода
Обновите {{Access-Token}} и {{Refresh-Token}}
Далее выполните запрос:
POST{{local}}/aggregatorRest/runMethod?method Authorization: {{Access-Token}} Content-Type: application/json { "startChannel": 2 }
{{methodName}} – имя метода, который вы хотите сохранить.
В теле запроса передаётся JSON с номером канала старта.
Если передать канал старта = 0, то метод будет применён для всех каналов.
Если вы неправильно указали канал старта, или такого канала не существует, то выдаст ошибку "No ActiveAggregator".
2.5 Планировщик задач
2.5.1 Запуск Планировщика
Обновите {{Access-Token}} и {{Refresh-Token}}
Далее выполните запрос:
POST{{local}}/scheduler/start Authorization: {{Access-Token}}
2.5.2 Остановка Планировщика
Обновите {{Access-Token}} и {{Refresh-Token}}
Далее выполните запрос:
POST{{local}}/scheduler/stop Authorization: {{Access-Token}}
2.5.3 Получение списка сохраненных планов для Планировщика
Обновите {{Access-Token}} и {{Refresh-Token}}
Далее выполните запрос:
GET{{local}}/scheduler/plans Authorization: {{Access-Token}}
Ответ:
[ "", "exmapleName" ]
2.5.4 Сохранение текущего метода для Планировщика
Обновите {{Access-Token}} и {{Refresh-Token}}
Далее выполните запрос:
POST{{local}}/scheduler/save?name={{methodName}} Authorization: {{Access-Token}}
{{methodName}} – имя метода, который вы хотите сохранить.
2.5.5 Загрузка текущего метода для Планировщика
Обновите {{Access-Token}} и {{Refresh-Token}}
Далее выполните запрос:
POST{{local}}/scheduler/load?name={{methodName}} Authorization: {{Access-Token}}
{{methodName}} – имя метода, который вы хотите загрузить
3 Получение результатов измерений
3.1 LIMS (ЛИУС)
Одна из задач интеграции "Хроматэк Аналитик 4" со сторонним программным обеспечением – экспорт результатов измерений в LIMS (ЛИУС).
LIMS – Laboratory Information Management System – Лабораторная информационно-управляющая система – ЛИУС, ЛИС.
LIMS – это специальное программное обеспечение, предназначенное для управления лабораторными потоками работ и документов. Оно оптимизирует сбор, анализ, возврат и отчетность лабораторных данных. Часто применяется в фармацевтической и пищевой промышленности.
Назначением LIMS является получение достоверной информации по результатам испытаний и оптимизации управления этой информацией с целью её использования для принятия корректных своевременных управленческих решений.
Как соотносятся LIMS и "Хроматэк Аналитик"?
Хроматограф служит одним из источников информации о производимых продуктах или протекающих на производстве процессах, наряду с другим аналитическим оборудованием и прочими поставщиками информации, необходимой для управления качеством продукции.
"Хроматэк Аналитик" передает в LIMS результаты хроматографического анализа, а также специальных расчётов по некоторым нормативным документам.
Какие LIMS поддерживает "Хроматэк Аналитик"?
"Хроматэк Аналитик" не поддерживает какие-то конкретные виды LIMS. Более правильно утверждение, что он поддерживает любые виды LIMS, поскольку практически все они обладают гибкими настройками, позволяющими получать данные из внешних источников.
"Хроматэк Аналитик" позволяет экспортировать данные в нескольких форматах.
3.2 Настройка экспорта
Настройка экспорта в LIMS сводится к обычной настройке отчёта.
В основных настройках необходимо в качестве формата отчёта выбрать JSON.
Рисунок 3.1 – Выбор формата отчёта – JSON
3.3 Результаты измерений
LIMS может запросить результаты анализов с помощью REST API. Доступно два вида GET-запроса.
Запросы выполняются к конечной точке:
GET {{host}}/api/a4/v1/report
Например:
GET http://a4.chromatec.ru/api/a4/v1/report
3.3.1 Запрос последнего результата для хроматографа
Для выполнения запроса необходимо знать серийный номер хроматографа. Он указывается в качестве параметра serial_number:
GET {{host}}/api/a4/v1/report?serial_number=123456
Ответ – массив объектов ExportData:
class ExportData { id: string; name: string; tables: ExportTable[]; } class ExportTable { id: string; name: string; params: ExportParam[]; } class ExportParam { key: string; name: string; value: any; }
Пример:
[ { "id": "gost31371_7_2020", "name": "ГОСТ 31371.7-2020", "tables": [...] }, { "id": "gost3169_2021", "name": "ГОСТ 31369-2021", "tables": [...] }, { "id": "gost57975_1_2017", "name": "ГОСТ 57975.1-2017", "tables": [...] }, ]
3.3.2 Запрос нескольких результатов
Вы можете запросить сразу несколько результатов.
Для этого в качестве параметра нужно передать имя проекта и (опционально) даты начала и окончания интересующего интервала времени.
Параметры:
project | Имя проекта |
---|---|
from_time | Начало интервала времени (необязательный параметр) |
to_time | Окончание интервала времени (необязательный параметр) |
Например, для проекта "ГОСТ 31371" мы хотим получить отчёты за период от 2023-08-08 10:00:00 до 2023-08-08 11:00:00:
GET {{host}}/api/a4/v1/report?project=ГОСТ 31371&from_time=2023-08-08 10:00:00&to_time=2023-08-08 12:00:00
Ответ – массив следующей структуры:
interface IExportResults { path: string; dateCreation: Date; results: ExportData[]; }
См. класс ExportData.
Пример:
[ { "path": "C:\\Source\\analytic4\\data\\reports\\analytic\\ГОСТ 31371\\2023-08-08 10-23-17 1,2,3.json", "dateCreation": "2023-08-08T08:13:18.251Z", "results": [ { "id": "gost31371_7_2020", "name": "ГОСТ 31371.7-2020", "tables": [...] }, { "id": "gost3169_2021", "name": "ГОСТ 31369-2021", "tables": [...] }, ] }, ..... ]
3.3.3 Обработка полученных данных
Как можно видеть из вышеприведённого описания, результат экспорта представляет собой массив объектов, каждый из которых имеет уникальное значение свойства "id".
Свойство "name" содержит локализованное название расчёта.
Значение свойства "tables" – массив таблиц, каждая из которых имеет уникальное значение идентификатора "id" и массив параметров.
У каждого параметра свойство "name" может содержать имя компонента, или дополнительный идентификатор, см. рисунок ниже.
Например, чтобы из массива gas_composition получить концентрации всех компонентов, нужно выбрать все элементы, у которых key == conc.
Чтобы найти все параметры метана, нужно из массива gas_composition получить все элементы, у которых name == метан.
И т.п.
Параметры различных расчётов перечислены в следующем разделе.
Рисунок 3.2 – Принцип формирования объекта ExportParam
3.4 Параметры расчётов
3.4.1 Расчёт по ГОСТ 31369-2021
{ "id": "gost31369_2021", "name": "ГОСТ 31369-2021", "tables": [...] }
Входные нормализованные данные
{ "id": "normalized_conc", "name": "Входные нормализованные доли", "params": [{ "key": "units.molar_percent", "name": "этан", "value": 21.389341056409574 }, ..... ] }
Значение параметра "name" – название компонента.
Возможные значения параметра "key":
Значение | Тип данных | Описание |
---|---|---|
molar_percent | number | Молярная доля, % |
mass_percent | number | Массовая доля, % |
volume_percent | number | Объёмная доля, % |
molar_uncert | number | Стандартная неопределённость молярной доли, % |
molar_uncert_ext | number | Расширенная неопределённость молярной доли, % |
Физико-химические показатели идеального газа
{ "id": "ideal_gas", "name": "Физико-химические показатели идеального газа", "params": [ { "key": "physical_parameter_value", "name": "molar_mass@g/mol", "value": 38.76 }, ..... ] }
Возможные значения параметров:
key | Тип | name | Описание | |
---|---|---|---|---|
physical_parameter_value physical_parameter_uncert_ext |
Значение Неопределённость |
number number | molar_mass@g/mol | Молярная масса, г/моль |
physical_parameter_value physical_parameter_uncert_ext |
Значение Неопределённость |
number number | compress_factor | Фактор сжимаемости |
physical_parameter_value physical_parameter_uncert_ext |
Значение Неопределённость |
number number | high_combustion_heat_molar@kJ/mol | Молярная теплота сгорания высшая, кДж/моль |
physical_parameter_value physical_parameter_uncert_ext |
Значение Неопределённость |
number number | low_combustion_heat_molar@kJ/mol | Молярная теплота сгорания низшая, кДж/моль |
physical_parameter_value physical_parameter_uncert_ext |
Значение Неопределённость |
number number | high_combustion_heat_mass@MJ/kg | Массовая теплота сгорания высшая, МДж/кг |
physical_parameter_value physical_parameter_uncert_ext |
Значение Неопределённость |
number number | low_combustion_heat_mass@MJ/kg | Массовая теплота сгорания низшая, МДж/кг |
physical_parameter_value physical_parameter_uncert_ext |
Значение Неопределённость |
number number | high_combustion_heat_volume@MJ/m3 | Объёмная теплота сгорания высшая, МДж/м³ |
physical_parameter_value physical_parameter_uncert_ext |
Значение Неопределённость |
number number | low_combustion_heat_volume@MJ/m3 | Объёмная теплота сгорания низшая, МДж/м³ |
physical_parameter_value physical_parameter_uncert_ext |
Значение Неопределённость |
number number | density_abs@kg/m3 | Плотность, кг/м³ |
physical_parameter_value physical_parameter_uncert_ext |
Значение Неопределённость |
number number | density_rel | Плотность относительная |
physical_parameter_value physical_parameter_uncert_ext |
Значение Неопределённость |
number number | high_wobbe@MJ/m3 | Число Воббе высшее, МДж/м³ |
physical_parameter_value physical_parameter_uncert_ext |
Значение Неопределённость |
number number | low_wobbe@MJ/m3 | Число Воббе низшее, МДж/м³ |
Физико-химические показатели реального газа
"id": "ideal_gas",
В остальном структура аналогична идеальному газу.
3.4.2 Расчёт по ГОСТ 31371.7-2020
{ "id": "gost31371_7_2020", "name": "ГОСТ 31371.7-2020", "tables": [...] }
Входные ненормализованные доли
{ "id": "input_unnormalized_concentrations", "name": "Входные ненормализованные доли, мол.%", "params": [ { "key": "#4", "name": "этан", "value": 0.007505432770666584 }, ..... ] }
Значение параметра "name" – название компонента.
Возможные значения параметра "key":
Значение | Тип данных | Описание |
---|---|---|
#<номер хроматограммы> | number | Молярная доля, % |
range_mol | number | Размах, мол. % |
range_mol_norm | number | Норматив размаха, мол. % |
acceptability | boolean | Приемлемость |
Таблица градуировочных зависимостей
{ "id": "calibration_functions_ab", "name": "Таблица градуировочных зависимостей", "params": [ { "key": "calibration_function", "name": "этан", "value": "X = (2.1808e-4) * A / q" }, ..... ] }
Приемлемость градуировочных коэффициентов
{ "id": "calibration_factors_acceptability", "name": "Приемлемость градуировочных коэффициентов", "params": [ { "key": "#1", "name": "этан", "value": 0.0002180760478864956 }, ..... ] }
Значение параметра "name" – название компонента.
Возможные значения параметра "key":
Значение | Тип данных | Описание |
---|---|---|
#<номер хроматограммы> | number | Градуировочный коэффициент |
average | number | Средний градуировочный коэффициент |
calibration_factor_range | number | Размах градуировочных коэффициентов, отн. % |
normative | number | Норматив, отн.% |
acceptability | boolean | Приемлемость |
Проверка соответствия ГСО и пробы
{ "id": "standard_and_sample_compliance", "name": "Проверка соответствия ГСО и пробы", "params": [ { "key": "conc_not_normalized", "name": "этан", "value": 4.663504906873109 }, ..... ] }
Значение параметра "name" – название компонента.
Возможные значения параметра "key":
Значение | Тип данных | Описание |
---|---|---|
conc_not_normalized | number | Ненормализованная доля, мол. % |
min | number | Минимум допустимого диапазона градуировочного СО, мол.% |
max | number | Максимум допустимого диапазона градуировочного СО, мол.% |
standard_conc | number | Паспортное значение молярной доли СО, % |
acceptability | boolean | Приемлемость |
Нормализованный состав пробы
{ "id": "gas_composition", "name": "Нормализованный состав пробы", "params": [ { "key": "conc", "name": "этан", "value": 21.4 }, ..... ] }
Значение параметра "name" – название компонента.
Возможные значения параметра "key":
Значение | Тип данных | Описание |
---|---|---|
conc | number | Нормализованная доля, мол. % |
uncertainty_mol_ext | number | Расширенная неопределённость, мол.% |
analysis_method | number | Метод анализа |